package com.it.water.common;

import lombok.Data;

import java.util.Map;

/**
 * 统一返回对象
 *
 * @author <a href="mailto:2038322151@qq.com">Miraitowa_zcx</a>
 * @version 1.0
 * @since 2024-03-17
 */
@Data
public class Result<T> {

    /**
     * 成员变量-成功状态码
     */
    private static final String SUCCESS_CODE = "200";

    /**
     * 成员变量-错误状态码
     */
    private static final String ERROR_CODE = "-1";

    /**
     * 成员变量-状态码
     */
    private String code;

    /**
     * 成员变量-数据
     */
    private T data;

//    /**
//     * 成员变量-键值数据
//     */
//    private Map<String, T> map;

    /**
     * 成员变量-消息
     */
    private String msg;

    /**
     * 创建一个成功的Result对象
     *
     * @return Result对象
     */
    public static <T> Result<T> success() {
        Result<T> result = new Result<>();
        result.setCode(SUCCESS_CODE);
        return result;
    }

    public static <T> Result<T> success(String msg) {
        return error(SUCCESS_CODE, msg);
    }

    /**
     * 创建一个成功的Result对象
     *
     * @param data 数据
     * @return Result对象
     */
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setCode(SUCCESS_CODE);
        result.setData(data);
        return result;
    }

    /**
     * 创建一个错误的Result对象
     *
     * @param msg 错误消息
     * @return Result对象
     */
    public static <T> Result<T> error(String msg) {
        return error(ERROR_CODE, msg);
    }

    /**
     * 创建一个错误的Result对象
     *
     * @param code 错误状态码
     * @param msg  错误消息
     * @return Result对象
     */
    public static <T> Result<T> error(String code, String msg) {
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

//    /**
//     * 创建一个成功的Result对象
//     *
//     * @param code 状态码
//     * @param msg  消息
//     * @param map 键值数据
//     * @return Result对象
//     */
//    public static <T> Result<T> success(String code, String msg, Map<String, T> map) {
//        Result<T> result = new Result<>();
//        result.setCode(code);
//        result.setMsg(msg);
//        result.setMap(map);
//        return result;
//    }
//
//    /**
//     * 创建一个错误的Result对象
//     *
//     * @param code 状态码
//     * @param msg  消息
//     * @param map 键值数据
//     * @return Result对象
//     */
//    public static <T> Result<T> error(String code, String msg, Map<String, T> map) {
//        Result<T> result = new Result<>();
//        result.setCode(code);
//        result.setMsg(msg);
//        result.setMap(map);
//        return result;
//    }
}
